(** Types et exceptions pour bplib + commun functions *)

(* ===================================================================== *)
(** Le type des variables dans un environnement de valeurs *)
(* ===================================================================== *)
type t_env_macro = EnvInt of int | EnvString of string 
(* ===================================================================== *)

(* ===================================================================== *)
(** Exception levee lors d'une evaluation, si une variable est libre 
    , Erreur de type et erreur de syntax *)
(* ===================================================================== *)
exception FreeVar of string
exception TypeClash of string
exception SyntaxError of string
(* ===================================================================== *)

(* ================================================================== *)
(** Protocole External 01  : Deprecated *)
(* ================================================================== *)
type external01_protocole =
    { 
      externalCommande : string;
      externalArguments : string list;
      externalBits : string
    }
exception External01Error
(* ================================================================== *)

(* ================================================================== *)
(** Le type de la version 1.1 *)
(* ================================================================== *)
type protocole_external = 
      {
	ex_methode : string option;
	ex_code : int option;
	ex_args : string list;
	ex_input : string
      }

type reponse_external = Asynchrone of int * string | Synchrone of string
(* ================================================================== *)


(* ================================================================== *)
(** Exception levée lorsque l'on ne trouve pas un fichier dont on demande 
    la lecture. *)
(* ================================================================== *)
exception FileNotFound of string
(* ================================================================== *)


(* ================================================================== *)
(** Exception pour les tests unitaires : doit-on stopper l'execution ?
    et message d'erreur *)
(* ================================================================== *)
exception TEST_FAILURE of bool * string
(* ================================================================== *)


(* ================================================================== *)
(** Transtypage des char vers les bool. '1' est true, le reste false *)
(* ================================================================== *)
let bool_of_char c = c = '1'
(* ================================================================== *)

(* ================================================================== *)
(** Transtypage des char vers les bool. '1' est true, le reste false *)
(* ================================================================== *)
let char_of_bool c = if c then '1' else '0'
(* ================================================================== *)

(* ================================================================== *)
(** Transtypage des char vers les bool option. '1' est true, '*' None 
    le reste false *)
(* ================================================================== *)
let bool_option_of_char = function
  | '1' -> Some true
  | '*' -> None
  | _ -> Some false
(* ================================================================== *)

(* ================================================================== *)
(** Transtypage des bool option vers les char. '1' est true, '*' None 
    le reste false *)
(* ================================================================== *)
let char_of_bool_option = function
  | Some true -> '1'
  | Some false -> '0'
  | None -> '*'
(* ================================================================== *)

